import { app } from 'electron';
import fs from 'fs';
import path from 'path';
import _ from 'lodash';

const configTemplate = {
    background: {
        red: 17,
        green: 17,
        blue: 17
    },
    show: 5000,
    shuffle: true,
    lock: 'slide',
    pin: '0000'
};

class Configuration {
    constructor() {
        this._config = _.assign(configTemplate, {});
    }

    get config() {
        return this._config;
    }

    set config(value) {
        this._config = _.assign(this._config, value);
    }

    initialize() {
        fs.readFile(path.join(app.getPath('userData'), 'config.json'), 'utf8', (err, data) => {
            if (err) {
                fs.writeFile(path.join(app.getPath('userData'), 'config.json'), JSON.stringify(this._config), err => {
                    this._config = _.assign(configTemplate, {});
                });
            }
            try {
                this._config = _.assign(configTemplate, JSON.parse(data));
            } catch (err) {
                this._config = _.assign(configTemplate, {});
            }
        });
    }
    save() {
        fs.writeFile(path.join(app.getPath('userData'), 'config.json'), JSON.stringify(this._config), err => {
            if (err) throw err;
        });
    }
}

export default new Configuration();
